<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php学习笔记[025]</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="show"><span>025 PHP面向对象开发学习（九）</span></div>
<?php include 'include/top.php';?>
<div class="text"><b>对象描述配置__tostring()</b>
<strong>__tostring</strong>可获得对象的描述配置。我们举例说明。
<div class="code">
&lt;?php<br />
class My<br />
{<br />
function __tostring()<br />
{<br />
return '这是一个演示的类&lt;br /&gt;';<br />
}<br />
}<br />
$p=new My();<br />
echo $p;<br />
?&gt;</div>
我们来看他给我们的信息。
<div class="effect">
<?php
class My
	{
	function __tostring()
		{
		return '这是一个演示的类<br />';
		}
	}
$p=new My();
echo $p;
?>
</div>
</div>
<div class="text"><b>对象方法的异常处理__call()</b>
<strong>__call</strong>用于访问不存在或错误的方法名和参数。我们还是用实例来说明<br />
<div class="code">
&lt;?php<br />
class My1<br />
{<br />
function __call($n,$v)<br />
{<br />
echo '一个名为'.$n.'的方法错误或不存在!&lt;br /&gt;';<br />
echo '有问题的参数是:';<br />
print_r($v);<br />
}<br />
}<br />
$q=new My1;<br />
$q-&gt;fun2('第一个参数',2,'三');<br />
?&gt;<br />
</div>
我们运行这段代码
<div class="effect">
<?php
class My1
	{
	function __call($n,$v)
		{
		echo '一个名为'.$n.'的方法错误或不存在!<br />';
		echo '有问题的参数是:';
		print_r($v);
		}
	}
$q=new My1;
$q->fun2('第一个参数',2,'三');
?>
</div>

</div>
<div class="text"><b>克隆对象的应用__clone</b>
<strong>clone</strong>用于克隆一个对象并且可用<strong>__clone()</strong>函数初始化克隆对象<br />
我们举例说明：
<div class="code">
&lt;?php<br />
class My2<br />
{<br />
public $name='我的类';<br />
function __clone()<br />
{<br />
$this-&gt;name='克隆后的类';<br />
}<br />
}<br />
$r=new My2;<br />
echo $r-&gt;name.'&lt;br /&gt;';<br />
$s=clone $r;<br />
echo $s-&gt;name.'&lt;br /&gt;';<br />
?&gt;</div>
我们让这段代码运行起来。
<div class="effect">
<?php
class My2
	{
	public $name='我的类';
	function __clone()
		{
		$this->name='克隆后的类';
		}
	}
$r=new My2;
echo $r->name.'<br />';
$s=clone $r;
echo $s->name.'<br />';
?>
</div>
</div>
<div class="text"><b>自动载入对象的方法__autoload()</b>
<strong>__autoload</strong>快速取得对象名称并自动载入当前页面<br />
这是一个系统函数。不是class里面的方法！当然我们还是用实例来说明它，首先我们建立一个025_1.php的文件。<br />
里面的内容是如下所示：
<div class="code">&lt;?php<br />
  class s025_1<br />
{<br />
public $name='引用文件的类&lt;br&gt;';<br />
function fun()<br />
{<br />
return '引用文件的函数&lt;br&gt;';<br />
}<br />
}<br />
?&gt;</div>
然后我们运行下面的函数<br />

<div class="code">
  &lt;?php<br />
    function __autoload($n)<br />
    {<br />
    include('include/'.$n.'.php');<br />
    }<br />
    $t=new s025_1;<br />
    echo $n=iconv('gbk','utf-8',$t-&gt;name);<br />
    echo $f=iconv('gbk','utf-8',$t-&gt;fun());</p>
  <p>?&gt;<br />
</div>
我们看结果，发现他能在实例化的时候自动include这个文件。
<div class="effect">
<?php
function __autoload($n)
	{
	include('include/'.$n.'.php');
	}
$t=new s025_1;
echo $n=iconv('gbk','utf-8',$t->name);
echo $f=iconv('gbk','utf-8',$t->fun());

?>
</div>
</div>

</body>
</html>
